#include<stdio.h>
#include<sys/wait.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#define NUM 128
#define CMD_NUM 64
int main(){

  char command[NUM];//获取命令行输入的内容 如 "ls -a -l\n\0”
  for(;;){
    char* argv[CMD_NUM]={NULL};//存放解析的出来的单个命令字符串
    command[0]=0;// 初始化获取的字符串数组
    printf("[who@myhostname mydir]$ ");
    fflush(stdout); //为的是保证命令行输入内容是在提示符这一行的
    fgets(command,sizeof(char)*NUM,stdin); //从键盘获取命令行内容到command字符串中
    command[strlen(command)-1] = '\0'; //为的是消去命令行最后一个输入的回车换行符\n
    const char* sep = " "; //分割字符串的标志

    argv[0] = strtok(command,sep);//第一个参数存放的是命令本身
    int i =1;
    while(argv[i] =strtok(NULL,sep)){ //遍历获取命令行输入的字符串，以空格分开
      i++;
    }
    if(strcmp(argv[0],"cd")==0){ //内建命令要单独出来，给父进程处理
     if(argv[1]) chdir(argv[1]);
     continue;
    }
    if(fork() == 0){//子进程处理命令
      execvp(argv[0],argv);
      exit(1);
    }
    int status;
    waitpid(-1,&status,0);
    printf("exit code:%d\n",(status>>8) & 0xFF);
  }

  return 0;
}
